dpdk代码总体思路 您所在的位置:网站首页 dpdk rcu dpdk代码总体思路

dpdk代码总体思路

2023-03-23 14:52| 来源: 网络整理| 查看: 265

dpdk代码总体思路 原创

mb61737bf531aa2 2023-03-20 13:32:39 博主文章分类:dpdk&vpp ©著作权

文章标签 系统性能 数据结构 上下文切换 文章分类 JavaScript 前端开发

©著作权归作者所有:来自51CTO博客作者mb61737bf531aa2的原创作品,请联系作者获取转载授权,否则将追究法律责任

1.用户空间轮询

减少中断带来开销;

减少系统调用带来开销;

零拷贝减少内存拷贝的时间;

轮询 Polling,busy looping 提供了I/O批量处理的可能性;

避免中断性能瓶颈是DPDK提升数据包处理速度的关键之一;

2.多核CPU性能优化

RSS硬件队列;

CPU独占:独占CPU资源,减少调度影响,提高系统性能;

CPU绑定:减少CPU上下文切换,提高系统性能;

中断亲和 : 中断负载均衡,减轻其他CPU负担,提高系统性能;

进程亲和:减少CPU上下文切换,提高系统性能;

中断隔离:减少中断对CPU调度影响,提高系统性能;

Per CPU:Per-CPU是基于空间换时间的方法, 让每个CPU都有自己的私有数据段(放在L1中),并将一些变量私有化到 每个CPU的私有数据段中. 单个CPU在访问自己的私有数据段时, 不需要考虑其他CPU之间的竞争问题,也不存在同步的问题. 注意只有在该变量在各个CPU上逻辑独立时才可使用;

锁优化无锁数据结构,将并发最大化;Per-CPU设计,尽量避免资源竞争;采用RCU机制,读写共享数据可以无锁并行;深入理解RCU|核心原理

spinlock,采用非阻塞锁,防止上下文切换导致cache miss;

采用CAS原子操作(Compare and Swap)进行无锁设计;

4.批量处理

轮询机制允许一次接收或发送多个报文;

批量处理分摊的接收或发送操作本身的开销;

绝大部分报文需要做相同或相似的计算处理,意味着相同的指令会被反复地执行,报文的批量计算分摊了函数调用的上下文切换,堆栈的初始化等等开销,同时大大减少了l1i cache miss

对于某一个函数,l1icache miss 仅仅发生在第一个报文被处理的时刻

批量计算提供了更好的代码优化可能性(数据预取,多重循环等)

5.Cache优化

CPU的速度远远大于RAM的速度

程序在运行时具有局部性规律

时间局部性,很快还会访问

空间局部性,相邻也会访问

不同级别cache速度差异 L1 > L2 > L3

减少Cache Miss是提升性能的关键

Cache 层次化结构

dpdk代码总体思路_上下文切换

iCacheMiss 常常被忽略

更优的代码,编译器优化选项

更小的代码尺寸

更好的代码布局- 分支预测

Cache一致性问题

原则是避免多个核访问同一个内存地址或数据结构

在数据结构上,每个核都有独立的数据结构

多个核访问同一个网卡:每个核都创建单独的接收队列和发送队列

代码优化技巧Cache Line 对齐,减少dCache miss, 避免伪共享;数据预取,减少dCache miss, prefetch 指令;分支预测,优化代码布局, 提高CPU流水线效率;‍‍‍‍‍‍函数内联,减少函数调用开销;CPU扩展指令集SIMD:sse,avx,减少指令数量,最大化的利用一级缓存访存的带宽;多重循环处理报文,更好地优化CPU流水线;编译器优化;

http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!! 但行好事 莫问前程 --身高体重180的胖子

收藏 评论 分享 举报

上一篇:contrack TCP协议状态转换

下一篇:iptables 各种target



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有